//
//  AFFData.h
//  AnyfishApp
//
//  Created by Bob Lee on 15/9/29.
//  Copyright © 2015年 Anyfish. All rights reserved.
//

#import <Foundation/Foundation.h>

/**
 * 注意，一般情况下子类只需要做1件事
    1.重写updateWithData或updateWithTlv（重写时记得调用基类方法）
   
    初始化需要为属性设置默认值时：重写setDefaultValue
    需要实现非引擎数据的属性值拷贝时：重写copyWithZone
 */
@interface AFFData : NSObject


@property (nonatomic, strong) NSData *aData;    ///< tlv已解析出来的数据
@property (nonatomic, assign) BOOL isSelected;    ///< 是否选中
@property (nonatomic, assign) BOOL isExpand;    ///< 是否展开，默认NO；
@property (nonatomic, assign) U32 serverTime;    ///< 数据带回来的系统时间
//@property (nonatomic, assign) BOOL isCache;    ///< 是否缓存数据，默认YES

@property (nonatomic, strong) AFFData *webDataCatch;    ///< 缓存关联的web解析数据；捕手新增；获取后缓存到对应数据上

/**
 直接数据值全拷贝，会重新分配内存
 *  NSArray *arrCopy = [NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject:weakSelf.mArrData]];
 */
- (id)copyMemoryAF;

/**
 * 此方法会在init方法调用，子类通过重写此方法实现初始化属性设置
 */
- (void)setDefaultValue;



/**
 * 子类不要重写
 */
//- (id)initWithTlv:(AFFTLV*)tlv;

/**
 * 初始化使用解析到的data数据（子类不要重写）
 */
+ (id)initWithData:(NSData*)aData;

/**
 * 子类通过重写此方法为自己属性赋值
 */
- (void)updateWithData:(NSData*)aData;

/**
 * 子类不要重写
 */
//- (id)initWithData:(NSData*)aData;

/**
 * 拷贝方法，子类可通过重写，实现非下层数据的属性赋值
 */
- (id)copyWithZone:(NSZone*)zone;

@end


